#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(mysql-audit-plugin, [dev])
AC_CONFIG_AUX_DIR([config-aux])
AC_CANONICAL_TARGET

AC_CONFIG_SRCDIR([src/audit_plugin.cc])
AC_CONFIG_HEADER([include/_config.h])

AC_DEFUN([CHECK_DEBUG], [
        debug_default="no"
        AC_ARG_ENABLE(debug, [  --enable-debug=[no/yes] turn on debugging
                       [default=$debug_default]],, enable_debug=$debug_default)
        AC_MSG_CHECKING(whether to enable debugging)

        if test "x$enable_debug" = "xyes"; then
# Note that SAFE_MUTEX is needed in debug plugin compilation, in order that
# it aligns with MySQL at debug level. Specifically, in the MySQL source file
# "include/thr_mutex.h", we need both the my_mutex_init() function and the
# my_mutex_lock() function to use the same paradigm (i.e. both using
# "safe_mutex_*" calls ... or both using "native_mutex_*" calls ... but
# definitely NOT a mix of 'safe' and 'native').
        CPPFLAGS="$CPPFLAGS -g -D_DEBUG -DSAFE_MUTEX"
                AC_MSG_RESULT(yes)
        else
# We need to specify -DDBUG_OFF and -DNDEBUG in order to compile the plugin
# without MySQL debug components. Later versions of MySQL ignore the DBUG_OFF
# flag, but continue to respect the NDEBUG flag.
        CPPFLAGS="$CPPFLAGS -g -O2 -DDBUG_OFF -DNDEBUG"
                AC_MSG_RESULT(no)
		fi

])

dnl Run tests using C++ compiler 
dnl AC_LANG(C++)

# initialize automake
AM_INIT_AUTOMAKE([1.8 foreign tar-ustar])


#check debug
CHECK_DEBUG

#check for mysql src 
sinclude(config/ac_mysql.m4)
MYSQL_SRC_TEST
MYSQL_PLUGIN_DIR_TEST
MYSQL_LIB_SERVICES_TEST
AC_SUBST(MYSQL_INC)
AC_SUBST(MYSQL_PLUGIN_DIR)
AC_SUBST(MYSQL_LIBSERVICES)
#yajl include dir
YAJL_INC=-I`cd yajl/include && pwd`
AC_SUBST(YAJL_INC)
#udis86 include
UDIS_INC=-I`cd udis86 && pwd`
AC_SUBST(UDIS_INC)

#pcre
(cd pcre && CFLAGS=-fPIC ./configure --enable-utf --disable-cpp --disable-shared --enable-static )
if test $? -ne 0 ; then 
	AC_MSG_ERROR([Failed pcre configure])
fi


dnl AC_PROG_CC set CFLAGS=-g if CFLAGS was empty before. Reset to empty value
dnl when not building a debug version.
dnl if test "$ac_test_CFLAGS" != set -a "$enable_debug" = no; then
dnl  CFLAGS=
dnl fi
dnl AC_PROG_CXX set CXXFLAGS=-g if CXXFLAGS was empty before. Reset to empty
dnl value when not building a debug version.
dnl if test "$ac_test_CXXFLAGS" != set -a "$enable_debug" = no; then
dnl   CXXFLAGS=
dnl fi


#check for programs
AC_PROG_CC
AC_PROG_LIBTOOL
AC_PROG_CXX
AC_PROG_CPP

AC_PATH_PROG(MV, mv, mv)
AC_PATH_PROG(RM, rm, rm)
AC_PATH_PROG(CP, cp, cp)
AC_PATH_PROG(SED, sed, sed)
AC_PATH_PROG(CMP, cmp, cmp)
AC_PATH_PROG(CHMOD, chmod, chmod)
AC_PATH_PROG(HOSTNAME, hostname, hostname)
AC_PATH_PROG(DIFF, diff, diff)


#for some reason we need to add -D_GNU_SOURCE
#this should have been added by AC_GNU_SOURCE but doesn't seem
#to work
#CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS"

#add the mysql flags needed (not needed as we put this in mysql_inc.h)
#CPPFLAGS="$CPPFLAGS -DMYSQL_DYNAMIC_PLUGIN -DMYSQL_SERVER"

#we can add the following flags for better error catching: -Werror -Wimplicit
CPPFLAGS="$CPPFLAGS -Werror -Wall"
CFLAGS="$CFLAGS -Wimplicit"
CXXFLAGS="-fno-implicit-templates -fno-strict-aliasing"

#add pthread libs
LIBS="$LIBS -lpthread"




#make sure we have const
AC_C_CONST
AC_TYPE_SIZE_T

#version stuff
if test -z "$MYSQL_AUDIT_PLUGIN_VERSION" ;then
	MYSQL_AUDIT_PLUGIN_VERSION=1.0.0
fi
if test -z "$MYSQL_AUDIT_PLUGIN_REVISION" ;then
	MYSQL_AUDIT_PLUGIN_REVISION=99999
fi
if test -z "$MYSQL_AUDIT_PLUGIN_SYMBOL_VERSION" ;then
        MYSQL_AUDIT_PLUGIN_SYMBOL_VERSION=${MYSQL_AUDIT_PLUGIN_VERSION//./_}_$MYSQL_AUDIT_PLUGIN_REVISION
fi


AC_SUBST(MYSQL_AUDIT_PLUGIN_VERSION)
AC_SUBST(MYSQL_AUDIT_PLUGIN_REVISION)
echo "Version: $MYSQL_AUDIT_PLUGIN_VERSION-$MYSQL_AUDIT_PLUGIN_REVISION Symbol version: $MYSQL_AUDIT_PLUGIN_SYMBOL_VERSION"
CPPFLAGS="$CPPFLAGS -DMYSQL_AUDIT_PLUGIN_VERSION='\"$MYSQL_AUDIT_PLUGIN_VERSION\"'"
CPPFLAGS="$CPPFLAGS -DMYSQL_AUDIT_PLUGIN_REVISION='\"$MYSQL_AUDIT_PLUGIN_REVISION\"'"
CPPFLAGS="$CPPFLAGS '-DMYSQL_AUDIT_PLUGIN_SYMBOL_VERSION()=extern const char audit_plugin_version_$MYSQL_AUDIT_PLUGIN_SYMBOL_VERSION'"

# Percona`s MySQL macro
if [[ "$PERCONA_BUILD" = "true" ]]; then
	CPPFLAGS="$CPPFLAGS -DPERCONA_BUILD" # Percona`s build macro, used to distinguish between MySQL/MariaDB build VS Percona build
fi

#subst the relevant variables
AC_SUBST(CPPFLAGS)
AC_SUBST(CXXLAGS)
AC_SUBST(CLAGS)

#mariadb-visibility section start
AC_ARG_ENABLE(mariadb-visibility,
[ --enable-mariadb-visibility, Enable symbol visibility for Mariadb, default:no ],
[case "${enableval}" in
	 yes) mariadb_visibility=yes ;;
	 no) mariadb_visibility=no ;;
	 *) AC_MSG_ERROR([bad value ${enableval} for --enable-mariadb-visibility]) ;;
esac],
[ mariadb_visibility=no ]
)
AC_MSG_RESULT($mariadb_visibility)
AM_CONDITIONAL([ENABLE_MARIADB_SYMBOLS], [test "x$mariadb_visibility" = "xyes"])
#mariadb-visibility section end

AC_CONFIG_FILES([Makefile
		src/Makefile
		yajl/Makefile
		yajl/src/Makefile
		udis86/Makefile
		udis86/libudis86/Makefile
				])
AC_OUTPUT


AC_MSG_NOTICE([CPPFLAGS: $CPPFLAGS])

 
